package com.leedsoft.config.webapp_initializer;

import com.leedsoft.config.spring_config.RootConfig;
import com.leedsoft.config.spring_config.SecurityMethodConfig;
import com.leedsoft.config.spring_config.SecurityWebConfig;
import com.leedsoft.config.spring_config.ServletConfig;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import javax.servlet.*;

/**
 * 1、在servlet3.0容器中注册DispatcherServlet：
 *      继承AbstractAnnotationConfigDispatcherServletInitializer是一种快捷方式。
 *      代为创建了DispatcherServlet和ContextLoaderListener
 *
 * 2、注册其他的servlet、filter、listener：
 *      覆盖onStartup方法，通过servletContext添加即可注册。
 */
public class SpittrWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{RootConfig.class, SecurityWebConfig.class};
    }

    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{ServletConfig.class};
    }

    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override//可以自定义DispatcherServlet配置
    protected void customizeRegistration(ServletRegistration.Dynamic registration) {
        registration.setMultipartConfig(new MultipartConfigElement("D:\\leedsjung\\test\\tmp"));
    }

    /**
     * 注意：请求参数分三种：查询参数query String、路径参数path、表单参数form
     * 其中，表单参数提交，会产生请求体（request body），必须配置CharacterEncodingFilter设置utf-8编码，才能正确读取中文表单参数。
     */
    @Override//映射路径跟DispatcherServlet一直的filter的快速注册方式
    protected Filter[] getServletFilters() {
        return new Filter[] {new CharacterEncodingFilter("utf-8", true)};
    }

    @Override//获取servletContext引用，配置相关内容
    public void onStartup(ServletContext servletContext) throws ServletException {
        super.onStartup(servletContext);
        servletContext.setInitParameter("spring.profiles.active", "prod");
//        servletContext.addListener(SessionListener.class);//有了rememberMe功能，没必要设置session失效时间
    }
}
